﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using TwoGesture.Resources;
using System.Windows.Forms;

namespace TwoGesture
{
    class ControlExamen
    {
        private static ControlExamen ObjCtrExamen = null;
        private Conexion ObjConexion = Conexion.InsConexion();
        private String DatoIdUsuario;
        private PreguntasCuestionario[] datoidpreguntas;
        private int contador = 0;
        List<PreguntasCuestionario> lista = new List<PreguntasCuestionario>();

        public FormUsuario FormUsuario
        {
            get
            {
                throw new System.NotImplementedException();
            }
            set
            {
            }
        }

        //metodo para traer una pregunta de la BD 
        public void ObtenerPregunta(String id)
        {
            SqlConnection ConexionSQL = ObjConexion.Enlace();
            ObjConexion.Enlace();
            ConexionSQL.Close();
            ConexionSQL.Open();
            SqlCommand sql = new SqlCommand("select top 1 idcuestionario from cuestpac where activo=1 and idpaciente=" + id + " order by idcuestionario asc", ConexionSQL);
            int DatoidCuestionario = sql.ExecuteScalar().GetHashCode();
            sql = new SqlCommand("select idpregunta from relacioncuestionario where idcuestionario=" + DatoidCuestionario, ConexionSQL);
            SqlDataReader dr = sql.ExecuteReader();
            int[] idpreguntas = new int[20];
            int i = 0;
            while (dr.Read())
            {
                idpreguntas[i] = dr.GetInt32(0);
                i = i + 1;
            }
            dr.Close();
            PreguntasCuestionario[] cuest = new PreguntasCuestionario[20];
            int j = 0;
            while (j < 20)
            {
                PreguntasCuestionario obj = new PreguntasCuestionario();
                sql = new SqlCommand("select * from pregunta pregunta where IdPregunta=" + idpreguntas[j], ConexionSQL);
                dr = sql.ExecuteReader();
                dr.Read();
                obj.idpregunta = dr.GetInt32(0);
                obj.descpregunta = dr.GetString(1);
                dr.Close();
                sql = new SqlCommand("select * from respuesta pregunta where IdPregunta=" + idpreguntas[j], ConexionSQL);
                dr = sql.ExecuteReader();
                dr.Read();
                obj.idrespuesta1 = dr.GetInt32(0);
                obj.descrespuesta1 = dr.GetString(1);
                obj.valor1 = dr.GetInt32(2);
                dr.Read();
                obj.idrespuesta2 = dr.GetInt32(0);
                obj.decrespuesta2 = dr.GetString(1);
                obj.valor2 = dr.GetInt32(2);
                dr.Read();
                obj.idrespuesta3 = dr.GetInt32(0);
                obj.decrespuesta3 = dr.GetString(1);
                obj.valor3 = dr.GetInt32(2);
                dr.Read();
                obj.idrespuesta4 = dr.GetInt32(0);
                obj.decrespuesta4 = dr.GetString(1);
                obj.valor4 = dr.GetInt32(2);
                cuest[j] = obj;

                int VMax = cuest[j].valor1;
                cuest[j].idcorracta = cuest[j].idrespuesta1;

                if (VMax < cuest[j].valor2)
                {
                    VMax = cuest[j].valor2;
                    cuest[j].idcorracta = cuest[j].idrespuesta2; ;
                }
                if (VMax < cuest[j].valor3)
                {
                    VMax = cuest[j].valor3;
                    cuest[j].idcorracta = cuest[j].idrespuesta3;
                }
                if (VMax < cuest[j].valor4)
                {
                    VMax = cuest[j].valor4;
                    cuest[j].idcorracta = cuest[j].idrespuesta4;
                }


                j = j + 1;
                dr.Close();


            }
            datoidpreguntas = cuest;

            ConexionSQL.Close();
        }

        public PreguntasCuestionario siguientePregunta()
        {
            PreguntasCuestionario obj = new PreguntasCuestionario();
            if (contador < 20)
            {
                obj = datoidpreguntas[contador];
                contador = contador + 1;
            }
            return obj;
        }


        //singleton
        public static ControlExamen InsCtrExamen()
        {

            if (ObjCtrExamen == null)
            {
                ObjCtrExamen = new ControlExamen();
            }
            return ObjCtrExamen;
        }

        public void Datosusuario(string _idusuari)
        {
            DatoIdUsuario = _idusuari;
        }
        public String IdUsuario()
        {
            return DatoIdUsuario;
        }

        internal SqlDataReader llenarTablaTest(Label a)
        {
            SqlConnection ConexionSQL = ObjConexion.Enlace();
            ObjConexion.Enlace();
            ConexionSQL.Close();
            ConexionSQL.Open();
            SqlCommand sql = new SqlCommand("select * from Cuestionario where IdCuestionario in " +
                "(select idcuestionario from cuestionarioUsuario where idusuario=@IdUsuario and activo=1) and activo=1", ConexionSQL);
            sql.Parameters.AddWithValue("@IdUsuario",a.Text);
            SqlDataReader dr = sql.ExecuteReader();
            return dr;
        }

        internal List<PreguntasCuestionario> ListarPreguntas(string idcuestionario, string p)
        {
            
            if (lista.Count==0)
            {
                SqlConnection ConexionSQL = ObjConexion.Enlace();
                ObjConexion.Enlace();
                ConexionSQL.Close();
                ConexionSQL.Open();
                SqlCommand sql = new SqlCommand(" select * from pregunta where IdPregunta in"+
                    "(select idpregunta from cuestionarioPregunta where idcuestionario=@IdCuest)", ConexionSQL);
                sql.Parameters.AddWithValue("@IdCuest", idcuestionario);
                SqlDataReader dr = sql.ExecuteReader();

                while (dr.Read())
                {
                    
                    lista.Add(new PreguntasCuestionario
                    {
                        idpregunta = dr.GetInt32(0),descpregunta=dr.GetString(1),idcorracta=Convert.ToInt32(idcuestionario)
                    });

                }
                dr.Close();
                for (int i = 0; i < lista.Count; i++)
                {

                    sql = new SqlCommand(" select * from Respuesta where IdPregunta=@IdCuest and Activo=1", ConexionSQL);
                    sql.Parameters.AddWithValue("@IdCuest", lista[i].idpregunta);
                    dr = sql.ExecuteReader();
                    dr.Read();
                    lista[i].idrespuesta1 = dr.GetInt32(0);
                    lista[i].descrespuesta1 = dr.GetString(1);
                    lista[i].valor1 = dr.GetInt32(2);
                    dr.Read();
                    lista[i].idrespuesta2 = dr.GetInt32(0);
                    lista[i].decrespuesta2 = dr.GetString(1);
                    lista[i].valor2 = dr.GetInt32(2);
                    dr.Read();
                    lista[i].idrespuesta3 = dr.GetInt32(0);
                    lista[i].decrespuesta3 = dr.GetString(1);
                    lista[i].valor3 = dr.GetInt32(2);
                    dr.Read();
                    lista[i].idrespuesta4 = dr.GetInt32(0);
                    lista[i].decrespuesta4 = dr.GetString(1);
                    lista[i].valor4 = dr.GetInt32(2);
                    dr.Close();


                }


             }

            return lista;
        }

        internal void guardarRespuestasUsuario(string pacienteId, string cuestionarioId, List<PreguntasCuestionario> lista)
        {
            
        }


        internal void guardarcalificacion(string p, string pacienteId, string cuestionarioId)
        {
            SqlConnection ConexionSQL = ObjConexion.Enlace();
            ObjConexion.Enlace();
            ConexionSQL.Close();
            ConexionSQL.Open();
            SqlCommand sql = new SqlCommand(" update cuestionarioUsuario set calificacion=@calif,activo=0 where idcuestionario=@IdCuest and idusuario=@paciente", ConexionSQL);
            sql.Parameters.AddWithValue("@IdCuest", cuestionarioId);
            sql.Parameters.AddWithValue("@paciente", pacienteId);
            sql.Parameters.AddWithValue("@calif", p);
            SqlDataReader dr = sql.ExecuteReader();
        }
    }
}
